package com.mgy.db.dao.mapper;

import com.mgy.db.TableRouter;
import com.mgy.db.common.domain.BigData;
import com.mgy.db.common.query.BigDataQuery;
import com.mgy.db.sharding.annotation.MybatisMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * (BigData)表数据库访问层
 *
 * @author maguoyong
 * @since 2020-01-29 12:03:46
 */
@MybatisMapper("big_data")
public interface BigDataMapper {
    /**
     * 通过ID查询单条数据
     *
     * @param id          主键
     * @param tableRouter 分库对象
     * @return 实例对象
     */
    BigData queryById(@Param("id") Integer id, TableRouter tableRouter);

    /**
     * 通过主键删除数据
     *
     * @param id          主键
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    Integer deleteById(@Param("id") Integer id, TableRouter tableRouter);

    /**
     * 新增数据（实体对象带分库分表信息）
     *
     * @param bigData 实例对象
     * @return 影响行数
     */
    Long insert(@Param("obj") BigData bigData);

    /**
     * 新增数据（实体对象不带分库分表信息，TableRouter带分库分表信息）
     *
     * @param bigData     实例对象
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    Long insert(@Param("obj") BigData bigData, TableRouter tableRouter);

    /**
     * 修改数据
     *
     * @return 影响行数
     */
    void batchInsert(@Param("list") List<BigData> list, TableRouter tableRouter);

    /**
     * 修改数据
     *
     * @param bigData 实例对象
     * @return 影响行数
     */
    Integer update(@Param("obj") BigData bigData);

    /**
     * 修改数据
     *
     * @param bigData 实例对象
     * @return 影响行数
     */
    Integer update(@Param("obj") BigData bigData, TableRouter tableRouter);

    /**
     * 分页查询列表
     *
     * @param bigDataQuery 实例对象
     * @return 对象列表
     */
    List<BigData> getBigDataListWithPage(@Param("obj") BigDataQuery bigDataQuery);

    /**
     * 分页查询列表
     *
     * @param bigDataQuery 实例对象
     * @return 对象列表
     */
    List<BigData> getBigDataListWithPage(@Param("obj") BigDataQuery bigDataQuery, TableRouter tableRouter);

    /**
     * 分页查询列表
     *
     * @param bigDataQuery 实例对象
     * @return 对象列表
     */
    List<BigData> getBigDataList(@Param("obj") BigDataQuery bigDataQuery);


    /**
     * 分页查询列表
     *
     * @param bigDataQuery 实例对象
     * @return 数量
     */
    Long getBigDataListCount(@Param("obj") BigDataQuery bigDataQuery);

    /**
     * 分页查询列表
     *
     * @param bigDataQuery 实例对象
     * @return 数量
     */
    Long getBigDataListCount(@Param("obj") BigDataQuery bigDataQuery, TableRouter tableRouter);
}